import { Component } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { MusicService } from '../music.service';

@Component({
  selector: 'app-musiclist',
  templateUrl: './musiclist.component.html',
  styleUrls: ['./musiclist.component.scss']
})
export class MusiclistComponent {
  MusicAlbumList: any[] = []
   /**
   * @type {string} searchText
   * 搜索方法绑定的搜索查询字符
   */
  searchText: string = ""
  
  /**
   * @type {boolean} showDelete
   * 控制垃圾箱的两种状态
   */
  showDelete: boolean = false
/**
 * @type {number} deleteCount
 * 记录删除的数量 初始值 0
 */
  deleteCount: number = 0
  /**
   * @type {string} albumId 
   * 获取歌单的id的变量
   */
  albumId: string = ''
  /**
   * 
   * @param router 导入路由Router
   * @param msuicServ 导入服务MusicService
   */
  constructor(private router:Router,private msuicServ:MusicService){
    /**
     * @property {function} refresh 
     * 刷新方法
     */
    this.refresh();
  }

  //搜索API
  search(ev?: Event) {
    if (ev) {
      if ((ev as any).code != 'Enter') return
    }
    //  $regex  正则表达式  模糊匹配
    /**
     * @property {string} searchParams
     * 定义搜索字段的参数，在getMusicList()方法里调用
     */
    let searchParams = `,"title":{"$regex":"${this.searchText}"}`
    console.log(searchParams)
    this.getMusicList(searchParams)
  }

/**
 * @property {function} refresh
 * 刷新方法
 */
 async refresh() {
    this.getMusicList();
    /**
     * @property {number} this.deleteCount
     * 获取 删除歌单的数量
     */
    this.deleteCount = await this.msuicServ.getDeleteCount('MusicAlbumItem')
  }

  /**
   * @property {function} addNewMusic
   * 跳转到编辑页面
   */
  addNewMusic() {
    this.msuicServ.addNewMusicAlbum()
  }

  /**
   * @property {function} onShowDelete
   * 改变垃圾箱的状态
   * @param {boolean} showDelete 
   * 根据 !this.showDelete的状态
   */
  // 垃圾箱的两种状态
  onShowDelete() {
    this.showDelete = !this.showDelete
    this.refresh()
  }

  //获取用户歌单页
  /**
   * @property {function} getMusicList 根据url组成的字段获取表 MusicAlbumItem 中的数据
   * @param {string} searchParams   搜索方法传入的变量
   * @returns 获得数据结果的json对象
   */
  async getMusicList(searchParams = '') {
    /**
     * @param {string} url 定义路径的变量 
     */
    let url = "http://metapunk.cn:9999/parse/classes/MusicAlbumItem?"
    /**
     * @param {string} paramsOrder 定义排序的变量
     * 根据  order=-createdAt  进行排序排序
     */
    let paramsOrder = `order=-createdAt`
    url += paramsOrder
    /**
     * @param {string} paramsId  获取歌单ID的变量
     * 根据 MusicAlbumItem表 中的album字段进行匹配
     */
    let paramsId = ""
    if (!this.albumId) {
    } else {
      paramsId = `,"album":"${this.albumId}"`
      console.log(paramsId)
    }
    url += paramsId
    // 匹配
    let paramsWhere;
    if (!this.showDelete) {
      paramsWhere = `where={"isDeleted":false${searchParams}${paramsId}}`
      url += "&" + paramsWhere
    } else {
      paramsWhere = `where={"isDeleted":true${searchParams}${paramsId}}`
      url += "&" + paramsWhere
    }
    // include包含    指针真实数据条件
    /**
     * paramsInclude {string} 定义指针真实数据条件
     */
    let paramsInclude = "include=album,music,user";
    url += "&" + paramsInclude
    let result = await fetch(url, {
      "headers": {
        "x-parse-application-id": "dev"
      },
      "body": null,
      "method": "GET",
      "mode": "cors",
      "credentials": "omit"
    });
    let data = await result.json()
    console.log(data)
    this.MusicAlbumList = data.results

  }
  // 删除
  /**
   * @property {function} deleteMusic 
   * @param {any} album  服务MusicService传过来的歌单对象
   * @param isRestore 是否删除成功
   */
  async deleteMusic(album: any, isRestore: boolean = false) {
    this.msuicServ.deleteObject("MusicAlbumItem",album,isRestore).then(isSuccess=>{
      console.log(album)
      //{objectId: 'OkLGywrEz2', createdAt: '2023-01-14T02:49:34.705Z', updatedAt: '2023-01-30T03:28:33.853Z', music: {…}, album: {…}, …}
      if(isSuccess){
        // 内存变量删除该项
        /**
         * findIndex() 方法返回传入一个测试条件（函数）符合条件的数组第一个元素位置
         *  当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置，之后的值不会再调用执行函数
         * 如果没有符合条件的元素返回 -1
         */
        let idx = this.MusicAlbumList.findIndex(item=>item.isEnabled == album.isEnabled)
        console.log(idx)
        this.MusicAlbumList.splice(idx,1)
        if(!isRestore){
          this.deleteCount ++;
        }else{
          this.deleteCount --;
        }
      }
    })
  }
  // 编辑
  editMusic(music: any) {
    console.log(music)
  }
}
